package Library.Game;

import java.rmi.*;
import java.util.*;

/**
 * ISession
 * Met een sessie-object kunnen acties op de gameserver worden uitgevoerd 
 * voor een specifieke speler.
 */
public interface ISession extends Remote
{
    /**
     * //TODO: javadoc
     * @param landID
     * @param amount
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    int reinforce(int landID, int amount) throws RemoteException, Exception;
    
    /**
     *
     * @param amount
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    int defend(int amount) throws RemoteException, Exception;
    
    /**
     * Geeft de spelerID terug van de speler dat gekoppeld is aan
     * het ?huidige spel?
     *
     * getPlayerId: Opvragen van de ingame spelerID.
     * @return spelerID
     * @throws RemoteException
     */
    int getPlayerId() throws RemoteException;

    /**
     * Geeft de naam van de speler terug.
     * @return spelernaam
     * @throws RemoteException
     */
    public String getName() throws RemoteException;

    /**
     * Een speler geeft hiermee aan dat hij klaar is 
     * met zijn beurt.
     * @return
     * @throws RemoteException
     */
    int endTurn() throws RemoteException;

    /**
     * Speler verlaat hiermee het huidige spel.
     * @throws RemoteException 
     * @throws Exception
     */
    void leaveGame() throws RemoteException, Exception;
    
    /**
     *
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    boolean startGame() throws RemoteException, Exception;
    
    /**
     *
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    List<IPlayer> getPlayers() throws RemoteException, Exception;

    /**
     *
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    int getNumberPlaceableArmys()throws RemoteException, Exception;

    /**
     *
     * @param landID1
     * @param landID2
     * @param amount
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    int attack(int landID1, int landID2, int amount) throws RemoteException, Exception;
    
    /**
     *
     * @return
     * @throws RemoteException
     */
    int getPlayerColor() throws RemoteException;

    /**
     *
     * @param decission
     * @return
     * @throws RemoteException
     * @throws Exception
     */
    int turnDecission(int decission) throws RemoteException, Exception;
}